package com.xxxx.server.mapper.course;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxx.server.entity.CompletionStatus;
import com.xxxx.server.entity.Course;
import com.xxxx.server.entity.Notice;
import com.xxxx.server.entity.StudentTranscript;
import com.xxxx.server.vo.CourseTaskVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author SR
 * @description 针对表【course】的数据库操作Mapper
 * @createDate 2021-11-13 16:21:23
 * @Entity generator.domain.Course
 */
public interface CourseMapper extends BaseMapper<Course> {

    /**
     * 课程分页
     *
     * @param page
     * @param text
     * @return
     */
    IPage<Course> getPage(@Param("page") Page<Course> page, @Param("text") String text, @Param("userId") Integer userId);

    /**
     * 名称查询
     *
     * @param title
     * @return
     */
    Course getByTitle(@Param("title") String title);

    /**
     * id查询
     *
     * @param itm_id
     * @return
     */
    Course getCourseById(@Param("itm_id") Integer itm_id);

    /**
     * 修改
     *
     * @param course
     * @return
     */
    int updateCourseById(Course course);

    /**
     * id删除
     *
     * @param id
     * @return
     */
    int deleteCourseById(@Param("id") Integer id);

    /**
     * 报名
     *
     * @param itmId 课程id
     * @param id    学生id
     */
    int addEnroll(@Param("itmId") Integer itmId, @Param("id") Integer id);

    /**
     * 已报名
     *
     * @param itm_id
     * @param id
     */
    Integer isEnroll(@Param("itm_id") Integer itm_id, @Param("id") Integer id);

    /**
     * 添加作业
     *
     * @param itmId
     * @param name
     */
    void addCourseTask(@Param("itmId") Integer itmId, @Param("name") String name, @Param("title") String title);

    /**
     * 作业分页
     *
     * @param page
     * @param text
     * @return
     */
    IPage<CourseTaskVO> getCourseTaskPage(@Param("page") Page<CourseTaskVO> page, @Param("text") String text, @Param("itmId") Integer itmId);

    /**
     * 修改作业
     *
     * @param tk_id
     * @param name
     */
    void updateCourseTask(@Param("tkId") Integer tk_id, @Param("name") String name, @Param("title") String title);

    /**
     * 提交作业
     *
     * @param completionStatus
     */
    void submitCourseTask(CompletionStatus completionStatus);

    /**
     * 学生作业分页
     *
     * @param page
     * @param text
     * @param tkId
     * @return
     */
    IPage<CompletionStatus> submitTaskPage(@Param("page") Page<CompletionStatus> page, @Param("text") String text, @Param("tkId") Integer tkId);

    /**
     * 判断左右提交次数
     *
     * @param cs_tk_id
     * @param cs_user_id
     * @return
     */
    Object getIsExist(@Param("cs_tk_id") Integer cs_tk_id, @Param("cs_user_id") Integer cs_user_id);

    /**
     * 打分
     *
     * @param score
     * @param csId
     */
    void taskScore(@Param("score") Integer score, @Param("csId") Integer csId);

    /**
     * 是否布置作业
     *
     * @param id
     */
    Integer getIsRegistered(@Param("id") Integer id);

    /**
     * 是否有学生报名
     *
     * @param id
     * @return
     */
    Integer getIsStudent(@Param("id") Integer id);

    /**
     * 获取学生成绩
     *
     * @param page
     * @param text
     * @return
     */
    IPage<CompletionStatus> getStudentTranscript(@Param("page") Page<CompletionStatus> page, @Param("text") String text, @Param("userId") Integer userId, @Param("itmId") Integer itmId);

    /**
     * 无提交记录
     *
     * @param id
     * @return
     */
    Integer getIsStuSubmitTK(@Param("id") Integer id);

    /**
     * 未打分记录
     *
     * @param id
     * @return
     */
    Integer getWithScoreNull(@Param("id") Integer id);

    /**
     * 获取课程学生
     *
     * @param itm_id
     * @return
     */
    List<Integer> getUserIdsByItmId(@Param("itm_id") Integer itm_id);

    /**
     * 获取学生各种分数
     *
     * @param userId
     * @return
     */
    List<CompletionStatus> getUserVariousScores(@Param("itmId") Integer itmId, @Param("userId") Integer userId);

    /**
     * 获取作业总数
     *
     * @param itm_id
     * @return
     */
    int getTKCountByItmId(@Param("itm_id") Integer itm_id);

    /**
     * 添加学生总成绩
     *
     * @param studentTranscript
     */
    void addStudentTranscript(StudentTranscript studentTranscript);

    /**
     * 发布通知
     *
     * @param notice
     * @return
     */
    int addNotice(Notice notice);

    /**
     * 修改通知
     *
     * @param notice
     */
    void updateNotice(Notice notice);

    /**
     * 删除
     *
     * @param nicId
     */
    void deleteNotice(@Param("nicId") Integer nicId);

    /**
     * 通知分页
     *
     * @param page
     * @return
     */
    IPage<Notice> getNoticePage(@Param("page") Page<Notice> page);

    /**
     * 学员端通知
     *
     * @return
     */
    List<Notice> getList();

    /**
     * 获取最新通知
     *
     * @return
     */
    Notice maxNotice(@Param("nicId") Integer nicId);

    /**
     * 获取最大id
     */
    int getMaxId();

    /**
     * 导出课程成绩
     *
     * @param itmId
     * @return
     */
    List<StudentTranscript> getExportDataByItmId(@Param("itmId") Integer itmId);
}
